package com.wn.main.ui.home.adapter

import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import com.blankj.utilcode.util.ConvertUtils
import com.wn.common.model.SubProjectInfo
import com.wn.common.provider.MainServiceProvider
import com.wn.framework.adapter.BaseBindViewHolder
import com.wn.framework.adapter.BaseRecyclerViewAdapter
import com.wn.framework.utils.ViewUtils.setClipViewCornerRadius
import com.wn.main.databinding.LayoutHomeTabItemBinding
import dagger.hilt.android.qualifiers.ActivityContext
import javax.inject.Inject

/**
 * @Author: wn
 * @Date: 2024/11/15 16:09
 * @Description: 首页资讯列表 -- 适配器
 * 不指定作用域的前提下 Hilt会为每次的依赖注入行为都创建不同的实例
 * 这里的 adapter 就是需要不同的实例 所以 无需作用域
 * 首页 tab 配合 viewpager2 使用 会有多个相同的 HomeTabFragment,但是每一个 HomeTabFragment 中的 list 都需要一个不同的 adapter
 */
// @ActivityScoped
class HomeTabItemAdapter @Inject constructor(@ActivityContext private val context: Context) :
  BaseRecyclerViewAdapter<SubProjectInfo, LayoutHomeTabItemBinding>() {
  /**
   * 子类通过 xml实现 ViewBinding，父类提供了 LayoutInflater ，viewType
   * 可以根据不同的 viewType传递不同的 viewBinding -- when
   */
  override fun getViewBinding(
    layoutInflater: LayoutInflater,
    parent: ViewGroup,
    viewType: Int,
  ): LayoutHomeTabItemBinding = LayoutHomeTabItemBinding.inflate(layoutInflater, parent, false)

  /**
   * 子类重写该方法绑定数据
   * 重写 [getViewBinding] 即可实现不同ViewHolder传递
   */
  override
  fun setViewBinding(
    holder: BaseBindViewHolder<LayoutHomeTabItemBinding>,
    item: SubProjectInfo?,
    position: Int,
  ) {
    item?.apply {
      holder.binding.subProjectInfo = this

      // 点击整个 Item 去详情页
      holder.itemView.setOnClickListener {
        if (this.link.isNullOrEmpty()) return@setOnClickListener
        MainServiceProvider.toArticleDetail(context, this.link!!, this.title ?: "")
      }
    }
    // 设置 View 圆角
    setClipViewCornerRadius(holder.itemView, ConvertUtils.dp2px(8.0F))
  }
}